package router

import (
	"Data-API-MCP/backend/internal/interfaces/http/handler"
	"Data-API-MCP/backend/internal/interfaces/http/middleware"

	"github.com/gin-gonic/gin"
)

// RegisterStatisticsRoutes 注册统计相关路由
func RegisterStatisticsRoutes(r *gin.RouterGroup, statsHandler *handler.StatisticsHandler) {
	// 统计路由组
	statsGroup := r.Group("/statistics")
	statsGroup.Use(middleware.AuthMiddleware())
	{
		// API调用统计
		statsGroup.POST("/api/call", statsHandler.RecordAPICall)             // 记录API调用
		statsGroup.GET("/api/stats", statsHandler.GetAPICallStats)           // 获取API调用统计
		statsGroup.GET("/api/logs/:api_id", statsHandler.GetAPICallLogs)     // 获取API调用日志
		statsGroup.GET("/api/calls/:id", statsHandler.GetAPICallDetail)      // 获取API调用详情
		statsGroup.GET("/api/errors", statsHandler.GetAPIErrorStats)         // 获取API错误统计
		statsGroup.GET("/api/performance", statsHandler.GetAPIPerformance)   // 获取API性能统计
		statsGroup.GET("/db/queries", statsHandler.GetDBQueryStats)          // 获取数据库查询统计
		statsGroup.GET("/db/performance", statsHandler.GetDBPerformance)     // 获取数据库性能统计
		statsGroup.GET("/db/connections", statsHandler.GetDBConnectionStats) // 获取数据库连接统计

		// 数据库连接统计
		statsGroup.GET("/database/stats", statsHandler.GetDatabaseStats) // 获取数据库连接统计
		statsGroup.GET("/database/connections/:type", statsHandler.GetDatabaseConnectionStats)
		statsGroup.POST("/database/connections", statsHandler.RecordDatabaseConnectionStats)

		// 服务统计
		statsGroup.GET("/service/stats/:service_id", statsHandler.GetServiceStats)   // 获取服务统计
		statsGroup.GET("/service/health/:service_id", statsHandler.GetServiceHealth) // 获取服务健康状态
		statsGroup.GET("/service/top", statsHandler.GetTopServices)                  // 获取热门服务
		statsGroup.GET("/service/logs/:service_id", statsHandler.GetServiceCallLogs) // 获取服务调用日志
		statsGroup.POST("/service/logs", statsHandler.RecordServiceCallLog)          // 记录服务调用日志

		// 系统统计
		statsGroup.GET("/system/logs", statsHandler.GetSystemLogs)           // 获取系统日志
		statsGroup.GET("/system/health", statsHandler.GetSystemHealth)       // 获取系统健康状态
		statsGroup.GET("/system/status", statsHandler.GetSystemStatus)       // 获取系统状态
		statsGroup.GET("/system/resources", statsHandler.GetSystemResources) // 获取系统资源
	}
}
